home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / www / ludzie / txf / progs / anystrtolong.lha / AnyStrToLong / AnyStrToLong.doc < prev    next >
Text File  |  1996-11-03  |  4KB  |  138 lines

  1.  
  2.  
  3.                             AnyStrToLong.asm
  4.                             AnyLongToStr.asm
  5.  
  6.                          © 1996 by Tadek Knapik
  7.  
  8.  
  9.     For changes look at AnyLongToStr part!
  10.  
  11.     This is a short documentation for two assembly language routines
  12. of mine. I wrote them because I needed it, and uploaded it because you
  13. may need it.
  14.     It is second Aminet relase. Changes only in AnyLongToStr.
  15.     This is placed in Public Domain. If you like it and use it in
  16. your progs, I just want you to send me an e-mail. I would also
  17. appreciate mentioning my name in your program's docs, but you don't have
  18. to do this (it is not a big thing, those routines :-).
  19.     Use it on your own risk! I didn't use any sources and made it by
  20. myself, so it may be faulty. If you find a bug (or want to make a
  21. suggestion) send me an e-mail (or snail-mail).
  22.     The routines are commented a little bit, so the docs are just
  23. a short explanation.
  24.  
  25.  
  26.                             AnyStrToLong.asm
  27.  
  28.     AnyStrToLong converts an ASCII string to a longword value. It is
  29. simalar to dos.library/StrToLong(), but it can handle not only decimal
  30. strings, but also binary and hex. You can pass in such strings:
  31.  
  32.     '145'                normal decimal
  33.         '-732'               negative
  34.         '$badC0DED'          hexadecimal
  35.         '0xdeadF00D'         hex as well
  36.     '%1001101110110001'  binary
  37.  
  38.     You pass in a string pointer in a0. The value is returned in
  39. d0. Register d1 is boolean success (if null, an error has occured and d0
  40. contains $FFFFFFFF).
  41.     As you can see, case of a-f (or A-F :-) hex letters doesn't
  42. matter.
  43.  
  44.  
  45.  
  46.                             AnyLongToStr.asm
  47.  
  48.     This one converts given longword to an ASCII string. You can
  49. choose between decimal, signed decimal, hex and bin.
  50.     Decimal mode should be clear - you get normal output, eg:
  51.  
  52.     '5932'
  53.  
  54.     Signed decimal means that if the highest bit is set, the value
  55. will be treated as negative, and will have minus sing. So the output can
  56. be:
  57.  
  58.     '823456'             if highest bit not set, or
  59.         '-9843'              if highest bit set.
  60.  
  61.     'The highest bit' is bit 31 in SIGN_LONG mode, bit 15 in
  62. SIGN_WORD mode and bit 7 in SIGN_BYTE mode. This way you can print out
  63. e.g priorities (copy ln_Pri byte to cleared d0 and specify
  64. LTS_SIGN_BYTE).
  65.  
  66.  
  67.     Binary output looks (surprise!) like that:
  68.  
  69.     '100010101111'
  70.  
  71.  
  72.     Hexadecimal output looks like that:
  73.  
  74.     'DEAFC0DE'           but it may also look like that:
  75.     'badd00de'           read below how to choose.
  76.  
  77.  
  78.     As you can see, the routine writes no prefixes! If you want it,
  79. write it yourself (not a difficult thing to do :-). That's how you
  80. choose between '$'/'0x'!
  81.  
  82.     You pass in the longword in d0, and the buffer pointer in a0.
  83. Register d1 is a flag register. The flags are:
  84.  
  85.    LTS_DECIMAL   - normal decimal conversion
  86.    LTS_SIGN_LONG - decimal signed mode (longword
  87.    LTS_SIGN_WORD - signed mode (word)
  88.    LTS_SIGN_BYTE - signed mode (byte)
  89.    LTS_BINARY    - convert to binary
  90.    LTS_HEX_UPPER - convert to hex (A-F uppercased)
  91.    LTS_HEX_LOWER - convert to hex (a-f lowercased)
  92.    LTS_HEX     - default hex (just set an equate, I set LTS_HEX_UPPER)
  93.    LTS_NEGATIVE  - default signed (I set LTS_SIGN_LONG)
  94.  
  95.     The routine returns in d0 number of charcters written (or null
  96. for an error). The string is null termineted (the null is included in
  97. character count). If succeded, a0 is the pointer to the last null (so
  98. you can insert here something else if you need).
  99.  
  100.     WARNING! Inn the previuos Aminet relase the routine had a bug,
  101. causing bad handling of 10, 100, 1000 etc. in decimal mode. Sorry, my
  102. mistake - it was 'bhi' instead of 'bpl'. The comment in this line was
  103. good, but the instruction was wrong. Blame me, not Motorola :-)
  104.  
  105.     Now the 68000 dividing-by-ten routine is really dividing by ten,
  106. and not comparing. Thanks for Simon N Goodwin for submitting this (and
  107. for his feedback, of course).
  108.  
  109.  
  110.  
  111.     That's all! Hope you like it.
  112.     Write to me if you're interested in StrToLong() patch using my
  113. AnyStrToLong (may help you in some special cases, or if you just want to
  114. set program priority in hex :-) - I wrote it for fun, but..
  115.     For bug reports, questions, suggestions, flames etc:
  116.  
  117.  
  118.     tadek@student.uci.agh.edu.pl (Tadek Knapik)
  119.  
  120.  
  121.     or:
  122.  
  123.     Tadek Knapik
  124.     ul. Duza Gora 35/88
  125.     30-857 Cracow
  126.     Poland
  127.  
  128.  
  129. ----------
  130.  
  131.     If you like mottos, here's mine:
  132.  
  133.  "Be yourself, no matter what they say" - Sting
  134.  
  135. ----------
  136.  
  137.  
  138.